package cn.jdx.tools.md4img;

import cn.jdx.tools.md4img.tools.*;

import java.io.*;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
【功能】:会抽取md文档中的所有图片资源
[1].自动下载url链接的资源图片
[2].自动判别绝对路径和相对路径，统一转化为绝对路径后，剪切到目标路径下
[3].执行完毕后，会返回目标文件的绝对路径
 */

public class Md4Img {

    private String uuidString = UUID.randomUUID().toString().replaceAll("-","");


    private String getOutputImageName(int index){
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        String indexStr = index+"";
        if (index<10){
            indexStr = "0"+index;
        }
        return indexStr+"_"+uuid;
    }

    private String getImagePath(File mdFile){
        File imgMkdirPath1 = new File(mdFile.getParent(), uuidString);
        File imgMkdirPath = new File(mdFile.getParent(), uuidString+"/jdx_img");
        if (!imgMkdirPath1.exists()) {
            imgMkdirPath1.mkdir();//创建目录
        }
        if (!imgMkdirPath.exists()) {
            imgMkdirPath.mkdir();//创建目录
        }
        return  imgMkdirPath.getAbsolutePath();
    }

    private String getProcessingDocument(String path){
        //【0】.记录参数
        int index = 1;//记录当前图片数量,用于生成对应的地址
        //【1】.读取文件
        File mdFile = new File(path);
        List<String> contentList = JdxToolsReadFileToList.getContentList(path);
        if (contentList.size()<=0){
            System.out.println("[文档为空]已经停止运行");
            return "";
        }
        //【2】.遍历所有的内容,把 "![img](https://)" 图片全部提取出来
        MdToolsIsLocalFile localFile = new MdToolsIsLocalFile();
        for (int i = 0; i < contentList.size(); i++) {
            String line = contentList.get(i);//拿到当前行
            String outputImgName = getOutputImageName(index);//生成目标图片名称
            String imgMkdirPath = getImagePath(mdFile);//创建对应的目录
            File pngFilePath = new File(imgMkdirPath, outputImgName);//生成最终图片文件的绝对路径

            if (localFile.isUrl(line)) {
                //(1).如果是网络url,则下载资源
                String url = localFile.getUrl();
                System.out.println("[图片链接]:" + url);
                //(2).开始下载资源
                JdxToolsDownload.downloadFile(url, pngFilePath.getAbsolutePath());
                //(3).然后替换掉当前list中的标签元素
                contentList.set(i, "![](./jdx_img/"+outputImgName+")");
                //(4).生成一个标题图片
                if(index==1){
                    File pngTitleFilePath = new File(imgMkdirPath, "title.png");
                    JdxToolsCopyFile.copy(pngFilePath.getAbsolutePath(),pngTitleFilePath.getAbsolutePath());
                }
                //(5).别忘记让标记自增
                index++;
            }else if (localFile.isLocalFile(line, mdFile)) {
                String filePath = localFile.getFilePath();
                System.out.println("[图片路径]:" + filePath);
                //(1).直接移动图片
                File sourceFile = new File(filePath);
                //开始移动
                //sourceFile.renameTo(pngFilePath);
                //(2).开始复制
                JdxToolsCopyFile.copy(sourceFile.getAbsolutePath(),pngFilePath.getAbsolutePath());
                //(3).修改list中的元素
                contentList.set(i, "![](./jdx_img/"+outputImgName+")");
                //(4).生成一个标题图片
                if(index==1){
                    File pngTitleFilePath = new File(imgMkdirPath, "title.png");
                    JdxToolsCopyFile.copy(pngFilePath.getAbsolutePath(),pngTitleFilePath.getAbsolutePath());
                }
                //(5).别忘记让标记自增
                index++;
            }

        }
        //【3】封装到sBuilder中
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < contentList.size(); i++) {
//            System.out.println(contentList.get(i));
            stringBuilder.append(contentList.get(i) + "\n");
        }
        return stringBuilder.toString();
    }



    public String start(String mdFilePath) {
        File mdFile = new File(mdFilePath);
        //【1】.获得已经处理完毕的md文档
        String processDoc = getProcessingDocument(mdFilePath);
        //【2】设置输出路径
        String outputPath = new File(mdFile.getParentFile().getAbsolutePath(),uuidString+"/index.md").getAbsolutePath();
        //【3】输出到指定路径
        JdxToolsWriteString.write(processDoc,outputPath);
        return outputPath;
    }

}
